﻿package com.itlaobing.listener;
import java.util.Date;
import java.util.logging.Logger;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import com.itlaobing.model.UserInfo;

/**
 * 用户监听
 * @author Ma_Hao
 * 
 * HttpSessionBindingListener :
 * 	这个类按照通俗的理解就是对session绑定对象（setAttribute）
 * 	过程的一种监听类型，它不需要配置xml文件，只是将实例化的
 *  HttpSessionBindingListener对象setAttribute到session里面
 *  就可以对HttpSessionBindingListener对象对象进行监听了，
 *  其实也就是对HttpSessionBindingListener对象所对应的session
 *  进行监听，还可以记录该session的具体信息（例如登录信息）。
 * 其中:
 *   valueBound是在setAttribute时触发
 *   valueUnbound则是在session销毁时触发（即session.invalidate()调用时）
 * session的销毁条件：
 * 1 调用 session.invalidate()方法
 * 2 session到了设置或者默认的超时时间，自动销毁（关闭浏览器此session还未销毁，只是不能再用了）
 */
public class UserListener implements HttpSessionBindingListener {
	private Logger log = Logger.getLogger(this.getClass().getName());
	private String user;
	private UserInfo container = UserInfo.getInstance();	//获得UserInfo类的对象

	public UserListener() {
		user = "";
	}

	// 设置在线监听人员
	public void setUser(String user) {
		this.user = user;
	}

	// 获取在线监听
	public String getUser() {
		return this.user;
	}

	// 当Session有对象加入时执行的方法
	public void valueBound(HttpSessionBindingEvent arg0) {
		log.info(new Date() + "，上线用户：" + this.user);

	}

	// 当Session有对象移除时执行的方法
	public void valueUnbound(HttpSessionBindingEvent arg0) {
		log.info(new Date() + "，下线用户：" + this.user);
		if (user != "") {
			container.removeUser(user);
		}
	}
}
